﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;

namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaCategoriaGastoViewModel
    {

        private RelayCommand editarCategoriaGastoCommand;
        private RelayCommand eliminarCategoriaGastoCommand;

        public event EditarEntidad EditarEntidad;
        private Guid idCategoriaGasto;
       
        private VentanaBusquedaCategoriaGasto view;

        public Guid IdCategoriaGasto
        {
            get { return idCategoriaGasto; }
            set { idCategoriaGasto = value; }

        }

        public List<ViewEntity> ListaCategoriasGastos { get; set; }

        public ICommand EditarCategoriaGastoCommand
        {
            get
            {
                return editarCategoriaGastoCommand;
            }
        }

        public ICommand EliminarCategoriaGastoCommand
        {
            get
            {
                return eliminarCategoriaGastoCommand;
            }
        }
              

        public VentanaBusquedaCategoriaGastoViewModel() {}
        
        public VentanaBusquedaCategoriaGastoViewModel(VentanaBusquedaCategoriaGasto view)
        {
            this.view = view;
            this.editarCategoriaGastoCommand = new RelayCommand(EditarCategoriaGasto);

            ListaCategoriasGastos = new CategoriaGastoLogica().ObtenerListaCategoriasParaEditar();
        }

        public VentanaBusquedaCategoriaGastoViewModel(VentanaBusquedaCategoriaGasto view, string eliminar)
        {
            this.view = view;
            this.eliminarCategoriaGastoCommand = new RelayCommand(EliminarCategoriaGasto);
            this.view.btnEditar.Visibility = Visibility.Collapsed;
            this.view.btnEliminar.Visibility = Visibility.Visible;
            this.view.titulo.Content = "Eliminar Categoría de Gasto";

            ListaCategoriasGastos = new CategoriaGastoLogica().ObtenerListaCategoriasParaEditar();
        }


        public void EditarCategoriaGasto(object parameter)
        {
            if (idCategoriaGasto != Guid.Empty)
            {
                CategoriaGasto entidad = new CategoriaGastoLogica().ObtenerEntidadParaEditar(idCategoriaGasto);
               
                this.EditarEntidad(CasosDeUso.NuevaCategoriaGasto, entidad);
                this.view.Close();
               
            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe elegir una categoría de gasto");
                nueva.ShowDialog();  

            }

        }

        public void EliminarCategoriaGasto(object parameter)
        {
            if (idCategoriaGasto != Guid.Empty)
            {
                CategoriaGasto entidad = new CategoriaGastoLogica().ObtenerEntidadParaEditar(idCategoriaGasto);

                
                    if (!new CategoriaGastoLogica().TieneGastosIngresados(entidad.IdCategoriaGasto))
                    {
                        entidad.Eliminada = true;
                        new CategoriaGastoLogica().Modificar(entidad);

                        VentanaAviso nueva = new VentanaAviso(false, "Finalización exitosa", "La categoría de gasto ha sido eliminada correctamente");
                        nueva.ShowDialog();


                        this.view.Close();

                    }
                    else
                    {
                        VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "La categoría que desea eliminar tiene gastos ingresados. Elimine primero esos gastos");
                        nueva.ShowDialog();

                    }
              
            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe elegir una categoría de gasto");
                nueva.ShowDialog();  

            }

        }













    }
}
